
//2516.每种字符至少取K个
class Solution {
public:
    int takeCharacters(string s, int k) {
        int ch[3]={0};
        for(auto e:s) ch[e-'a']++;  //统计字符串中各个字符的总个数

        for(int i=0;i<3;i++) 
        {
            ch[i]-=k;       //计算删去左右两边后中间区间各个字符最多出现的个数
            if(ch[i]<0) return -1;
        }

        int n=s.size();
        int left=0,ret=0;
        for(int right=0;right<n;right++)
        {
            ch[s[right]-'a']--;  //入窗口
            while(ch[0]<0||ch[1]<0||ch[2]<0)   //当中间区间字符出现的次数大于可以出现的次数进行出窗口
            {
                ch[s[left]-'a']++;  //出窗口
                left++;
            }
            ret=max(ret,right-left+1);  //更新答案
        }
        return n-ret;
    }
};